// BFS 队列实现
void BFS(Graph &G, int v) {
    using std::deque;
    queue<int> Q;
    Visit(G, v);           // 访问顶点
    G.Mark[v] = VISITED;   // 标记
    Q.push(v);             // 进入队列
    while (!Q.empty()) {   // 如果队列不为空
        int u = Q.front(); // 获得队列顶部元素
        Q.pop();           // 顶部元素出队
        for (Edge e = G.FirstEdge(u); G.IsEdge(e); e = G.NextEdge(e))
            if (G.Mark[G.ToVertex(e) == UNVISITED]) {
                Visit(G, G.ToVertex(e));
                G.Mark[G.ToVertex(e)] = VISITED;
                Q.push(G.toVertex(e));
            }
    }
}
